package ch6;

/**
 * oop: 1.把客观事务进行分门别类，设计一个class类与之对应
 * 
 * @author admin
 *
 */

public class Computer {

	// 主机:机箱，主板，CPU，内存条，显卡，硬盘
 
	// has-a关系...依赖关系，强依赖关系（计算机依赖于主机）
	// 实例变量，通常也称属性
	// 封装--就是隐藏类内部的实现，并对外提供访问的接口
	// 封装就是把属性私有化，使用private 修饰属性；并提供公有的getter和setter方法 或 构造方法 访问私有的属性 
	private MainMachine machine;
	// 显示器
	private Display display;
	// 键盘
	private KeyBoard keyboard;
	// 鼠标
	private Mouse mouse;
	
	/**
	 * 
	 * 构造方法：
	 * 1.方法名一类名相同（大小写也相同）；
	 * 2.没有返回值类型（不需要写void）；
	 * 3.当使用new关键词实例化对象时，需要调用构造方法
	 * 4.构造方法一般用于实例化对象时，申请内存时使用 或 实例化对象时初始化属性
	 * 5.java 编译器会默认给java类提供一个空参的构造方法（当没有编写空参构造方法时，会自动提供）；
	 * 	     如果显示编写了空参构造方法，则编译器不再提供空参构造方法
	 * 6.构造方法可以进行方法的重载
	 * 
	 */
	public Computer(){
		
		//初始化的概念：其实是第一次给变量进行赋值
		machine=new MainMachine();
		keyboard=new KeyBoard();
		display=new Display();
		mouse=new Mouse();
		
	}
	//全参构造方法
	public Computer(MainMachine machine, Display display, KeyBoard keyboard,
			Mouse mouse) {
		super();
		//当属性与局部变量名，名称相同时会产生名称冲突
		//可以使用this关键词表示类的属性
		this.machine = machine;
		this.display = display;
		this.keyboard = keyboard;
		this.mouse = mouse;
	}
	
	public Computer(MainMachine machine,Mouse mouse) {
		super();
		this.machine = machine;
		this.mouse = mouse;
		keyboard=new KeyBoard();
		display=new Display();
	}



	public MainMachine getMachine() {
		return machine;
	}

	public void setMachine(MainMachine machine) {
		this.machine = machine;
	}

	public Display getDisplay() {
		return display;
	}

	public void setDisplay(Display display) {
		this.display = display;
	}

	public KeyBoard getKeyboard() {
		return keyboard;
	}

	public void setKeyboard(KeyBoard keyboard) {
		this.keyboard = keyboard;
	}

	public Mouse getMouse() {
		return mouse;
	}

	public void setMouse(Mouse mouse) {
		this.mouse = mouse;
	}

	// 计算
	public void calculate() {
		System.out.println("执行计算");
	}

}
